// 测试XML工具调用解析器
const { ToolCallParser } = require('../dist/tools/parser.js');

function testXMLParser() {
    console.log('=== 🔧 XML工具调用解析器测试 ===\n');
    
    const testCases = [
        {
            name: '基础工具调用',
            input: '我来计算一下\n<function_calls>\n<invoke name="calculator">\n<parameter name="expression">2+3*4</parameter>\n</invoke>\n</function_calls>',
            expected: { toolName: 'calculator', args: { expression: '2+3*4' } }
        },
        {
            name: '多参数工具调用',
            input: '让我搜索\n<function_calls>\n<invoke name="web_search">\n<parameter name="query">AI技术</parameter>\n<parameter name="count">5</parameter>\n</invoke>\n</function_calls>',
            expected: { toolName: 'web_search', args: { query: 'AI技术', count: 5 } }
        },
        {
            name: 'MCP远程工具调用',
            input: '读取文件\n<function_calls>\n<invoke name="file-server::read-lines">\n<parameter name="path">package.json</parameter>\n<parameter name="from">1</parameter>\n<parameter name="to">5</parameter>\n</invoke>\n</function_calls>',
            expected: { toolName: 'file-server::read-lines', args: { path: 'package.json', from: 1, to: 5 } }
        },
        {
            name: 'JSON对象参数',
            input: '获取网页\n<function_calls>\n<invoke name="page_fetcher">\n<parameter name="url">https://example.com</parameter>\n<parameter name="options">{"maxContentLength": 3000}</parameter>\n</invoke>\n</function_calls>',
            expected: { toolName: 'page_fetcher', args: { url: 'https://example.com', options: { maxContentLength: 3000 } } }
        },
        {
            name: '无工具调用',
            input: '这是一个普通的回复，没有工具调用。',
            expected: null
        },
        {
            name: '格式错误测试',
            input: '错误格式\n<function_calls>\n<invoke>\n<parameter name="test">value</parameter>\n</invoke>\n</function_calls>',
            expected: 'error'
        }
    ];
    
    let passed = 0;
    let failed = 0;
    
    testCases.forEach((testCase, index) => {
        console.log(`🧪 测试 ${index + 1}: ${testCase.name}`);
        console.log(`输入: ${testCase.input.substring(0, 60)}${testCase.input.length > 60 ? '...' : ''}`);
        
        try {
            const result = ToolCallParser.parseResponse(testCase.input);
            
            if (testCase.expected === null) {
                // 期望无工具调用
                if (!result.hasToolCall) {
                    console.log('✅ 通过: 正确识别无工具调用');
                    passed++;
                } else {
                    console.log('❌ 失败: 错误识别出工具调用');
                    failed++;
                }
            } else if (testCase.expected === 'error') {
                // 期望解析错误
                if (result.parseError) {
                    console.log('✅ 通过: 正确识别格式错误');
                    console.log(`  错误信息: ${result.parseError.substring(0, 100)}...`);
                    passed++;
                } else {
                    console.log('❌ 失败: 未能识别格式错误');
                    failed++;
                }
            } else {
                // 期望成功解析
                if (result.hasToolCall && result.toolCall) {
                    const toolName = result.toolCall.function.name;
                    const args = result.toolCall.function.arguments;
                    
                    if (toolName === testCase.expected.toolName) {
                        console.log(`✅ 通过: 工具名正确 (${toolName})`);
                        console.log(`  参数: ${JSON.stringify(args)}`);
                        console.log(`  期望: ${JSON.stringify(testCase.expected.args)}`);
                        
                        // 简单比较参数
                        const argsMatch = JSON.stringify(args) === JSON.stringify(testCase.expected.args);
                        if (argsMatch) {
                            console.log('✅ 参数匹配正确');
                            passed++;
                        } else {
                            console.log('❌ 参数不匹配');
                            failed++;
                        }
                    } else {
                        console.log(`❌ 失败: 工具名不匹配 (期望: ${testCase.expected.toolName}, 实际: ${toolName})`);
                        failed++;
                    }
                } else if (result.parseError) {
                    console.log(`❌ 失败: 解析错误 - ${result.parseError}`);
                    failed++;
                } else {
                    console.log('❌ 失败: 未检测到工具调用');
                    failed++;
                }
            }
        } catch (error) {
            console.log(`❌ 失败: 异常 - ${error.message}`);
            failed++;
        }
        
        console.log(''); // 空行分隔
    });
    
    console.log('=== 📊 测试结果 ===');
    console.log(`✅ 通过: ${passed}`);
    console.log(`❌ 失败: ${failed}`);
    console.log(`📈 成功率: ${Math.round(passed / (passed + failed) * 100)}%`);
    
    if (failed === 0) {
        console.log('\n🎉 所有测试通过！XML解析器工作正常！');
    } else {
        console.log('\n⚠️  有测试失败，需要检查XML解析器实现。');
    }
}

testXMLParser();
